#ifndef CHOOSEFRIENDDIALOG_H
#define CHOOSEFRIENDDIALOG_H

#include <QDialog>
#include <QWidget>
#include <QHBoxLayout>
#include <QCheckBox>
#include <QLabel>
#include <QPainter>


class ChooseFriendDialog;
/*
 * 选择好友窗口的一个 好友项
 *
 */
class ChooseFriendItem : public QWidget
{
    Q_OBJECT
public:
    ChooseFriendItem(ChooseFriendDialog* owner,const QString& userId, const QIcon& avatar, const QString& name, bool checked);

    //根据鼠标的进入状态，绘制不同的颜色
    void paintEvent(QPaintEvent* event) override;
    void enterEvent(QEnterEvent* event) override;
    void leaveEvent(QEvent* event) override;

    const QString& getUserId() const {
        return userId;
    }

    QCheckBox* getCheckBox()  {
        return checkBox;
    }

private:
    bool isHover = false;          // 判断鼠标是否进入了复选框
    QCheckBox* checkBox;           //表示复选框
    QPushButton* avatarBtn;        //头像
    QLabel* nameLabel;             //名字内容
    ChooseFriendDialog* owner;     //记录了哪个QWidget 拥有这个ChooseFriendDialog
    QString userId;                //当前Item对应的userId是什么  当从左侧进行选择的时候，希望从右侧删除或者添加,这样可以建立联系
};


/*
 * 选择好友的窗口
 *
 */
class ChooseFriendDialog : public QDialog
{
    Q_OBJECT
public:
    ChooseFriendDialog(QWidget* parent,const QString& userId);

    void initLeftWindow(QHBoxLayout* layout);
    void initRightWindow(QHBoxLayout* layout);

    //添加会话详情中的好友信息
    void addFriend(const QString& userId,const QIcon& avatar,const QString& name,bool checked);
    // 添加已经选中的元素到右侧
    void addSelectedFriend(const QString& userId,const QIcon& avatar,const QString& name);
    //将已经选中的元素从右侧中删除
    void deleSeletedFriend(const QString& userId);

    // 处理完成按钮
    void clickOkBtn();

    // 加载数据到窗口中
    void initData();

    // 获取到选中的好友列表
    QList<QString> generateMemberList();

private:
    // 保存全部好友列表的QWidget
    QWidget* totalContainer;
    // 保存右侧选中好友列表的QWidget
    QWidget* selectedContainer;

    // 当前选择窗口是点击哪个用户来弹出的.
    QString userId;
};

#endif // CHOOSEFRIENDDIALOG_H
